// $u.mixin.js
import store from "@/store"

// 尝试将用户在根目录中的store/index.js的vuex的state变量，全部加载到全局变量中
let $uStoreKey = [];
try {
	$uStoreKey = store.state ? Object.keys(store.state) : [];
} catch (e) {}
// #ifndef VUE3
import {
	mapState
} from 'vuex'
module.exports = {
	created() {
		// 将vuex方法挂在到this中
		// 使用方法为：如果要修改vuex的state中的user.name变量为"史诗" => this.$vuex('user.name', '史诗')
		// 如果要修改vuex的state的version变量为1.0.1 => this.$vuex('version', '1.0.1')
		this.$vuex = (name, value) => {
			this.$store.commit('$uStore', {
				name,
				value
			})
		}
	},
	computed: {
		// 将vuex的state中的所有变量，解构到全局混入的mixin中
		...mapState($uStoreKey)
	}
}
// #endif

// #ifdef VUE3
import {
	defineComponent
} from 'vue';
const {
	state
} = store;
export default defineComponent({
	// 组件选项
	mixins: [{
		// mixin定义
		data() {
			return {
				...state['vuex']
			};
		},
	}],
	created() {
		this.$vuex = (name, value) => {
			this.$store.commit('$uStore', {
				name,
				value
			})
		}
		this.$power = (action) => {
			let userExists = false,
				all = false;
			var powerList = uni.getStorageSync("powerList") || [];
			userExists = powerList.some(user => user.mark === action);
			all = powerList.some(user => user.mark === 'all');
			if (userExists || all) {
				return true; // 有权限，继续下一个中间件或路由处理
			} else {
				return false;
				// res.status(403).send('Forbidden.'); // 无权限，返回403禁止访问
			}
		}
		this.$taskType = (name) => {
			if (name == 'image-recognition') {
				return '图片识别';
			}
			if (name == 'image-generation') {
				return '图片生成';
			}
			if (name == 'audio-generation') {
				return '配音生成';
			}
			if (name == 'audio-recognition') {
				return '音频识别';
			}
			if (name == 'chat') {
				return '对话';
			}
		}
		// createApp ,createSSRApp
		// app.config.globalProperties.$u.vuex = store.dispatch.bind(store);
		// app.config.globalProperties.$u.vuex =
		// 	(name, value) => {
		// 		store.commit('vuex', {
		// 			name,
		// 			value
		// 		})
		// 	}
	}
});
// #endif